home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 142 / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin / tools / s44play / s44p101s.lzh / param.s < prev    next >
Text File  |  2000-01-24  |  49KB  |  1,939 lines

  1.     .include    global.mac
  2.  
  3. ;----------------------------------------------------------------
  4. ;コマンドラインのパラメータを解析する
  5. ;<a0.l:コマンドラインの先頭
  6. ;>d0.l:負数=エラー
  7. ;>n-flag:mi=エラー
  8.     .text
  9.     .align    4,$2048
  10. get_params::
  11.     movem.l    d1-d7/a0-a6,-(sp)
  12.     movea.l    a0,a5            ;コマンドライン
  13.  
  14. ;環境変数CDROMの内容を取得する
  15. ;    環境変数の内容は.fmpファイルに出力するので,CD-ROMドライブを使わなくても必要
  16.     lea.l    cdrom_env_work,a0
  17.     lea.l    (cdrom_env_name,pc),a1
  18.     bsr    getenv
  19.     tst.b    (a0)
  20.     beq    2f
  21.     bsr    stou
  22.     bcs    2f
  23.     move.l    d0,d1
  24.     bsr    get_max_scsiid
  25.     cmp.l    d0,d1
  26.     bhi    2f
  27.     move.l    d1,env_scsiid
  28. 2:
  29.  
  30. ;パラメータバッファを初期化する
  31.     lea.l    param_buf,a2
  32.     move.w    #(param_buf_end-param_buf)/4-1,d1
  33.     moveq.l    #0,d0
  34. 1:    move.l    d0,(a2)+
  35.     dbra    d1,1b
  36.  
  37.     lea.l    param_buf,a2
  38.  
  39. ;環境変数S44PLAYを解釈する
  40.     lea.l    param_env_work,a0
  41.     lea.l    (param_env_name,pc),a1
  42.     bsr    getenv
  43.     tst.b    (a0)
  44.     beq    @f
  45.     movea.l    a0,a1
  46.     lea.l    param_copy1,a0
  47.     bsr    get_params_sub
  48.     bmi    99f
  49. @@:
  50.  
  51. ;コマンドラインを解釈する
  52.     movea.l    a5,a1            ;コマンドライン
  53.     lea.l    param_copy2,a0
  54.     bsr    get_params_sub
  55.     bmi    99f
  56.  
  57.     move.l    #-1,(a2)+        ;パラメータの終わり
  58.  
  59.     tst.l    scsiid
  60.     bpl    2f
  61.     lea.l    cdrom_env_work,a0
  62.     tst.b    (a0)
  63.     beq    2f
  64.     bsr    stou
  65.     bcs    2f
  66.     move.l    d0,d1
  67.     bsr    get_max_scsiid
  68.     cmp.l    d0,d1
  69.     bhi    2f
  70.     move.b    (a0)+,d0
  71.     beq    1f
  72.     cmp.b    #',',d0
  73.     bne    1f
  74.     bsr    stou
  75.     bcs    1f
  76.     cmp.l    #7,d0
  77.     bhi    1f
  78.     swap.w    d1
  79.     move.w    d0,d1
  80.     swap.w    d1
  81. 1:    move.l    d1,env_scsiid        ;ID,LUN
  82. 2:
  83.  
  84.     tst.l    param_scsiid
  85.     bpl    1f
  86.     move.l    env_scsiid,d0
  87.     bmi    2f
  88.     move.l    d0,param_scsiid
  89. 1:
  90. 2:
  91.  
  92.     tst.b    list_flag
  93.     beq    1f
  94. ;-l
  95. ;scsiidを設定した後に行うこと
  96.     tst.l    param_buf+pb_ptr    ;-lはファイル名やトラック番号と共存できない
  97.     bpl    83f
  98.     tst.b    conv_flag        ;-lは-cと共存できない
  99.     bne    83f
  100.     bsr    do_list
  101.     bra    90f            ;必ずエラー終了させる
  102. 1:
  103.  
  104.     tst.b    conv_flag
  105.     beq    1f
  106. ;-c<filename>
  107. ;scsiidを設定した後に行うこと
  108.                     ;-cはファイル名やトラック番号と共存する
  109.     tst.b    list_flag        ;-cは-lと共存できない
  110.     bne    83f
  111.     bsr    do_conv
  112.     bra    90f            ;必ずエラー終了させる
  113. 1:
  114.  
  115. ;-lを処理した後に行うこと
  116.     tst.l    param_buf+pb_ptr
  117.     bmi    88f
  118.  
  119.     moveq.l    #0,d0
  120. 99:    movem.l    (sp)+,d1-d7/a0-a6
  121.     rts
  122.  
  123. 80:    move.w    #EXIT_SCSIID_MISSING,exit_code
  124.     lea.l    (m_id_not_specified,pc),a0
  125.     bra    89f
  126. 81:    move.w    #EXIT_ILLEGAL_ENV_CDROM,exit_code
  127.     lea.l    (m_illegal_cdrom_env,pc),a0
  128.   .if 0
  129.     bra    89f
  130. 82:    move.w    #EXIT_DENY_68000,exit_code
  131.     lea.l    (m_deny_68000,pc),a0
  132.   .endif
  133.     bra    89f
  134. 89:    bsr    print_banner
  135.     bsr    eaprintcrlf
  136.     bra    90f
  137. 83:    move.w    #EXIT_CONFLICT_PARAM,exit_code
  138.     bra    87f
  139. 88:    move.w    #EXIT_MISSING_PARAM,exit_code
  140. 87:    bsr    print_banner
  141.     bsr    print_usage
  142. 90:    moveq.l    #-1,d0
  143.     bra    99b
  144.  
  145. m_id_not_specified:    .dc.b    'SCSI-ID が指定されていません',0
  146. m_illegal_cdrom_env:    .dc.b    '環境変数 CDROM の内容が異常です',0
  147.   .if 0
  148. m_deny_68000:        .dc.b    '68000 では -onmem を指定しなければ処理が間に合いません',0
  149.   .endif
  150.     .even
  151.  
  152. ;----------------------------------------------------------------
  153. ;パラメータを解析する
  154. ;<a0.l:バッファの先頭
  155. ;<a1.l:文字列の先頭
  156. ;<a2.l:パラメータのバッファ
  157.     .text
  158.     .align    4,$2048
  159. get_params_sub:
  160. ;パラメータの文字列を分解する
  161.     movea.l    a0,a3
  162.     movea.l    a1,a4
  163. 10:    movea.l    a3,a0
  164.     movea.l    a4,a1
  165.     bsr    getword
  166.     movea.l    a1,a4
  167.     bmi    98f            ;文字列がない
  168.     beq    10b            ;""
  169. ;<d0.l:コピーしたワードの長さ
  170. ;<a0.l:バッファの先頭
  171. ;<a1.l:文字列の先頭のワードの直後
  172.     move.b    (a0),d0
  173.     cmp.b    #'-',d0
  174.     bne    20f            ;'-'以外で始まっている
  175.     move.b    (1,a0),d0
  176.     beq    20f            ;'-'のみなので標準入力(ファイル名と同じ)
  177.     addq.l    #1,a0
  178.     bsr    tolower
  179.     cmp.b    #'c',d0
  180.     bne    9f
  181.     addq.l    #1,a0
  182. ;-c<filename>
  183.     tst.b    (a0)
  184.     bne    1f
  185.     movea.l    a3,a0
  186.     movea.l    a4,a1
  187.     bsr    getword
  188.     movea.l    a1,a4
  189.     bmi    87f            ;文字列がない
  190.     beq    87f            ;""
  191. 1:    st.b    conv_flag
  192.     lea.l    (str_hyphen,pc),a1    ;'-'は標準出力
  193.     bsr    strcmp
  194.     bne    2f
  195.     clr.l    output_filename_ptr    ;標準出力のときは0
  196.     bra    10b
  197. 2:    move.l    a0,output_filename_ptr    ;標準出力でなければファイル名へのポインタ
  198.     moveq.l    #'.',d0
  199.     bsr    strrchr
  200.     bpl    3f            ;'.'がある
  201.     lea.l    (str_dot_fmp,pc),a1    ;'.'がないときは'.fmp'を追加する
  202.     bsr    strcat
  203.     bra    4f
  204. 3:    bsr    strchr0
  205. 4:    lea.l    (1,a0),a3
  206.     bra    10b
  207.  
  208. 9:    cmp.b    #'v',d0
  209.     bne    9f
  210.     addq.l    #1,a0
  211.     bsr    stou
  212.     bcs    8f            ;-vで始まるスイッチが他にあるかも知れないので,
  213.                     ;-vの直後が数字でなくてもエラーにしない
  214. ;-v<n>
  215.     tst.b    (a0)
  216.     bne    83f
  217.     tst.l    d0
  218.     beq    84f
  219.     cmp.l    #MAX_VOLUME,d0
  220.     bhi    84f
  221.     move.l    d0,volume
  222.     bra    10b
  223. 8:    lea.l    (1,a3),a0
  224.  
  225. 9:    cmp.b    #'b',d0
  226.     bne    9f
  227.     addq.l    #1,a0
  228.     bsr    stou
  229.     bcs    8f            ;-bで始まるスイッチが他にあるかも知れないので,
  230.                     ;-bの直後が数字でなくてもエラーにしない
  231. ;-b<n>
  232.     tst.b    (a0)
  233.     bne    85f
  234.     tst.l    d0
  235.     beq    86f
  236.     cmp.l    #MAX_BUFUNT,d0
  237.     bhi    86f
  238.     move.l    d0,param_bufunt
  239.     bra    10b
  240. 8:    lea.l    (1,a3),a0
  241.  
  242. 9:    cmp.b    #'z',d0
  243.     bne    9f
  244.     addq.l    #1,a0
  245.     bsr    stou
  246.     bcs    8f            ;-zで始まるスイッチが他にあるかも知れないので,
  247.                     ;-zの直後が数字でなくてもエラーにしない
  248.   .if 0
  249. ;-z<n>
  250.     tst.b    (a0)
  251.     bne    75f
  252.     tst.l    d0
  253.     beq    76f            ;0は指定できない
  254.     cmp.l    #MAX_LOWER_LIMIT,d0
  255.     bhi    76f
  256.     move.l    d0,lower_limit
  257.   .endif
  258.     bra    10b
  259. 8:    lea.l    (1,a3),a0
  260.  
  261. 9:    cmp.b    #'l',d0
  262.     bne    9f
  263.     tst.b    (1,a0)            ;-loopなどがヒットしないようにする
  264.     bne    9f
  265. ;-l
  266.     st.b    list_flag
  267.     bra    10b
  268.  
  269. 9:    lea.l    (str_bass,pc),a1
  270.     bsr    stricmp
  271.     bne    9f
  272. ;-bass
  273.     st.b    bass_flag
  274.     sf.b    hicut_flag
  275.     bra    10b
  276.  
  277. 9:    lea.l    (str_hicut,pc),a1
  278.     bsr    stricmp
  279.     bne    9f
  280. ;-hicut
  281.     sf.b    bass_flag
  282.     st.b    hicut_flag
  283.     bra    10b
  284.  
  285. 9:    lea.l    (str_stereo,pc),a1
  286.     bsr    stricmp
  287.     bne    9f
  288. ;-stereo
  289.     sf.b    mono_flag
  290.     bra    10b
  291.  
  292. 9:    lea.l    (str_mono,pc),a1
  293.     bsr    stricmp
  294.     bne    9f
  295. ;-mono
  296.     st.b    mono_flag
  297.     bra    10b
  298.  
  299. 9:    lea.l    (str_fi,pc),a1
  300.     moveq.l    #2,d0
  301.     bsr    strnicmp
  302.     bne    9f
  303. ;-fi[[=]<n>]
  304.     moveq.l    #DEFAULT_FADEIN_SPEED,d0
  305.     tst.b    (a0)
  306.     beq    3f
  307.     cmpi.b    #'=',(a0)
  308.     beq    1f
  309.     bsr    stou
  310.     bcs    8f
  311.     bra    2f
  312. 1:    addq.l    #1,a0
  313.     bsr    stou
  314.     bcs    77f
  315. 2:    beq    78f
  316.     cmp.l    #31,d0
  317.     bhi    78f
  318. 3:    move.b    d0,fadein_speed
  319.     tst.b    (a0)
  320.     bne    77f
  321.     bra    10b
  322. 8:    lea.l    (1,a3),a0
  323.  
  324. 9:    lea.l    (str_fo,pc),a1
  325.     moveq.l    #2,d0
  326.     bsr    strnicmp
  327.     bne    9f
  328. ;-fo[=]<n>
  329.     cmpi.b    #'=',(a0)
  330.     beq    1f
  331.     tst.b    (a0)
  332.     beq    73f
  333.     bsr    stou
  334.     bcs    8f
  335.     bra    2f
  336. 1:    addq.l    #1,a0
  337.     bsr    stou
  338.     bcs    73f
  339. 2:    beq    74f
  340.     cmp.l    #31,d0
  341.     bhi    74f
  342.     move.b    d0,fadeout_speed
  343.     tst.b    (a0)
  344.     bne    73f
  345.     bra    10b
  346. 8:    lea.l    (1,a3),a0
  347.  
  348. 9:    lea.l    (str_silent,pc),a1
  349.     bsr    stricmp
  350.     bne    9f
  351. ;-silent
  352.     st.b    silent_flag
  353.     bra    10b
  354.  
  355. 9:    lea.l    (str_weigh,pc),a1
  356.     bsr    stricmp
  357.     bne    9f
  358. ;-weigh
  359.   .if 0
  360.     st.b    weigh_flag
  361.   .endif
  362.     bra    10b
  363.  
  364. 9:    lea.l    (str_reverse,pc),a1
  365.     bsr    stricmp
  366.     bne    9f
  367. ;-reverse
  368.   .if 0
  369.     st.b    reverse_flag
  370.   .endif
  371.     bra    10b
  372.  
  373. 9:    lea.l    (str_drama,pc),a1
  374.     bsr    stricmp
  375.     bne    9f
  376. ;-drama
  377.   .if 0
  378.     st.b    drama_flag
  379.   .endif
  380.     bra    10b
  381.  
  382. 9:    lea.l    (str_hard,pc),a1
  383.     bsr    stricmp
  384.     bne    9f
  385. ;-hard
  386.     clr.b    hard_soft
  387.     bra    10b
  388.  
  389. 9:    lea.l    (str_soft,pc),a1
  390.     bsr    stricmp
  391.     bne    9f
  392. ;-soft
  393.     move.b    #1,hard_soft
  394.     bra    10b
  395.  
  396. 9:    lea.l    (str_force,pc),a1
  397.     bsr    stricmp
  398.     bne    9f
  399. ;-force
  400.     st.b    force_flag
  401.     bra    10b
  402.  
  403. 9:    lea.l    (str_tdpause,pc),a1
  404.     bsr    stricmp
  405.     bne    9f
  406. ;-tdpause
  407.     st.b    tdpause_flag
  408.     bra    10b
  409.  
  410. 9:    lea.l    (str_onmem,pc),a1
  411.     bsr    stricmp
  412.     bne    9f
  413. ;-onmem
  414.     st.b    onmem_flag
  415.     bra    10b
  416.  
  417. 9:    lea.l    (str_preconv,pc),a1
  418.     bsr    stricmp
  419.     bne    9f
  420. ;-preconv
  421.     bra    10b            ;無視
  422.  
  423. 9:    lea.l    (str_himem,pc),a1
  424.     bsr    stricmp
  425.     bne    9f
  426. ;-himem
  427.     st.b    himem_flag
  428.     bra    10b
  429.  
  430. 9:    lea.l    (str_sony,pc),a1
  431.     bsr    stricmp
  432.     bne    9f
  433. ;-sony
  434.     move.b    #SONY,cdrom_type
  435.     bra    10b
  436.  
  437. 9:    lea.l    (str_toshiba,pc),a1
  438.     bsr    stricmp
  439.     bne    9f
  440. ;-toshiba
  441.     move.b    #TOSHIBA,cdrom_type
  442.     bra    10b
  443.  
  444. 9:    lea.l    (str_m16,pc),a1
  445.     bsr    stricmp
  446.     bne    9f
  447. ;-m16
  448.     move.w    #MS16B,param_file_format
  449.     move.l    #16000,param_file_frequency
  450.     bra    10b
  451.  
  452. 9:    lea.l    (str_m19,pc),a1
  453.     bsr    stricmp
  454.     bne    9f
  455. ;-m19
  456.     move.w    #MS16B,param_file_format
  457.     move.l    #18900,param_file_frequency
  458.     bra    10b
  459.  
  460. 9:    lea.l    (str_m22,pc),a1
  461.     bsr    stricmp
  462.     bne    9f
  463. ;-m22
  464.     move.w    #MS16B,param_file_format
  465.     move.l    #22050,param_file_frequency
  466.     bra    10b
  467.  
  468. 9:    lea.l    (str_m24,pc),a1
  469.     bsr    stricmp
  470.     bne    9f
  471. ;-m24
  472.     move.w    #MS16B,param_file_format
  473.     move.l    #24000,param_file_frequency
  474.     bra    10b
  475.  
  476. 9:    lea.l    (str_m32,pc),a1
  477.     bsr    stricmp
  478.     bne    9f
  479. ;-m32
  480.     move.w    #MS16B,param_file_format
  481.     move.l    #32000,param_file_frequency
  482.     bra    10b
  483.  
  484. 9:    lea.l    (str_m38,pc),a1
  485.     bsr    stricmp
  486.     bne    9f
  487. ;-m38
  488.     move.w    #MS16B,param_file_format
  489.     move.l    #37800,param_file_frequency
  490.     bra    10b
  491.  
  492. 9:    lea.l    (str_m44,pc),a1
  493.     bsr    stricmp
  494.     bne    9f
  495. ;-m44
  496.     move.w    #MS16B,param_file_format
  497.     move.l    #44100,param_file_frequency
  498.     bra    10b
  499.  
  500. 9:    lea.l    (str_m48,pc),a1
  501.     bsr    stricmp
  502.     bne    9f
  503. ;-m48
  504.     move.w    #MS16B,param_file_format
  505.     move.l    #48000,param_file_frequency
  506.     bra    10b
  507.  
  508. 9:    lea.l    (str_s16,pc),a1
  509.     bsr    stricmp
  510.     bne    9f
  511. ;-s16
  512.     move.w    #SS16B,param_file_format
  513.     move.l    #16000,param_file_frequency
  514.     bra    10b
  515.  
  516. 9:    lea.l    (str_s19,pc),a1
  517.     bsr    stricmp
  518.     bne    9f
  519. ;-s19
  520.     move.w    #SS16B,param_file_format
  521.     move.l    #18900,param_file_frequency
  522.     bra    10b
  523.  
  524. 9:    lea.l    (str_s22,pc),a1
  525.     bsr    stricmp
  526.     bne    9f
  527. ;-s22
  528.     move.w    #SS16B,param_file_format
  529.     move.l    #22050,param_file_frequency
  530.     bra    10b
  531.  
  532. 9:    lea.l    (str_s24,pc),a1
  533.     bsr    stricmp
  534.     bne    9f
  535. ;-s24
  536.     move.w    #SS16B,param_file_format
  537.     move.l    #24000,param_file_frequency
  538.     bra    10b
  539.  
  540. 9:    lea.l    (str_s32,pc),a1
  541.     bsr    stricmp
  542.     bne    9f
  543. ;-s32
  544.     move.w    #SS16B,param_file_format
  545.     move.l    #32000,param_file_frequency
  546.     bra    10b
  547.  
  548. 9:    lea.l    (str_s38,pc),a1
  549.     bsr    stricmp
  550.     bne    9f
  551. ;-s38
  552.     move.w    #SS16B,param_file_format
  553.     move.l    #37800,param_file_frequency
  554.     bra    10b
  555.  
  556. 9:    lea.l    (str_s44,pc),a1
  557.     bsr    stricmp
  558.     bne    9f
  559. ;-s44
  560.     move.w    #SS16B,param_file_format
  561.     move.l    #44100,param_file_frequency
  562.     bra    10b
  563.  
  564. 9:    lea.l    (str_s48,pc),a1
  565.     bsr    stricmp
  566.     bne    9f
  567. ;-s48
  568.     move.w    #SS16B,param_file_format
  569.     move.l    #48000,param_file_frequency
  570.     bra    10b
  571.  
  572. 9:    lea.l    (str_pcm,pc),a1
  573.     bsr    stricmp
  574.     bne    9f
  575. ;-pcm
  576.     move.w    #ADPCM,param_file_format
  577.     move.l    #15625,param_file_frequency
  578.     bra    10b
  579.  
  580. 9:    lea.l    (str_p16,pc),a1
  581.     bsr    stricmp
  582.     bne    9f
  583. ;-p16
  584.     move.w    #MS16B,param_file_format
  585.     move.l    #15625,param_file_frequency
  586.     bra    10b
  587.  
  588. 9:    lea.l    (str_loop,pc),a1
  589.     bsr    stricmp
  590.     bne    9f
  591. ;-loop
  592.     st.b    loop_flag
  593.     bra    10b
  594.  
  595. 9:    lea.l    (str_extra,pc),a1
  596.     bsr    stricmp
  597.     bne    9f
  598. ;-extra
  599.     st.b    extra_flag
  600.     bra    10b
  601.  
  602. 9:    lea.l    (str_lq,pc),a1
  603.     bsr    stricmp
  604.     bne    9f
  605. ;-lq
  606.     move.b    #LOW_QUALITY,quality_level
  607.     bra    10b
  608.  
  609. 9:    lea.l    (str_hq,pc),a1
  610.     bsr    stricmp
  611.     bne    9f
  612. ;-hq
  613.     move.b    #HIGH_QUALITY,quality_level
  614.     bra    10b
  615.  
  616. 9:    lea.l    (str_sq,pc),a1
  617.     bsr    stricmp
  618.     bne    9f
  619. ;-sq
  620.     move.b    #SUPER_QUALITY,quality_level
  621.     bra    10b
  622.  
  623. 9:    lea.l    (str_int,pc),a1
  624.     moveq.l    #3,d0
  625.     bsr    strnicmp
  626.     bne    9f
  627. ;-int[=]<n>
  628.     cmpi.b    #'=',(a0)
  629.     beq    1f
  630.     tst.b    (a0)
  631.     beq    68f
  632.     bsr    stou
  633.     bcs    8f
  634.     bra    2f
  635. 1:    addq.l    #1,a0
  636.     bsr    stou
  637.     bcs    68f
  638. 2:    cmp.l    #MIN_INT,d0
  639.     blo    69f
  640.     cmp.l    #MAX_INT,d0
  641.     bhi    69f
  642.     move.b    d0,output_timerd_count
  643.     tst.b    (a0)
  644.     bne    68f
  645.     bra    10b
  646. 8:    lea.l    (1,a3),a0
  647.  
  648. 9:    lea.l    (str_id,pc),a1
  649.     moveq.l    #2,d0
  650.     bsr    strnicmp
  651.     bne    9f
  652. ;-id[=]ID[,LUN]
  653.     cmpi.b    #'=',(a0)
  654.     beq    1f
  655.     bsr    stou
  656.     bcs    8f
  657.     bra    2f
  658. 1:    addq.l    #1,a0
  659.     bsr    stou
  660.     bcs    80f
  661. 2:    move.l    d0,d1
  662.     bsr    get_max_scsiid
  663.     cmp.l    d0,d1
  664.     bhi    80f
  665.     move.l    d1,param_scsiid        ;SCSI-ID
  666.     cmpi.b    #',',(a0)
  667.     bne    3f
  668.     addq.l    #1,a0
  669.     bsr    stou
  670.     bcs    80f
  671.     cmp.l    #7,d0
  672.     bhi    80f
  673.     move.w    d0,param_scsiid        ;LUN
  674. 3:    tst.b    (a0)
  675.     bne    80f
  676.     bra    10b
  677. 8:    lea.l    (1,a3),a0
  678.  
  679. 9:    lea.l    (str_mac,pc),a1
  680.     moveq.l    #3,d0
  681.     bsr    strnicmp
  682.     bne    9f
  683. ;-mac[N1[,N2…]]
  684.     moveq.l    #-1,d1
  685.     tst.b    (a0)
  686.     beq    3f
  687.     moveq.l    #0,d1
  688. 1:    bsr    stou
  689.     bcs    70f
  690.     cmp.l    #8,d0
  691.     bcc    70f
  692.     bset.l    d0,d1
  693.     cmpi.b    #',',(a0)+
  694.     beq    1b
  695.     tst.b    -(a0)
  696.     bne    70f
  697. 2:    moveq.l    #%11110110,d0
  698.     and.b    d1,d0
  699.     bne    70f
  700. 3:    move.b    d1,mac_select
  701.     bra    10b
  702.  
  703. 9:    lea.l    (str_mpu,pc),a1
  704.     moveq.l    #3,d0
  705.     bsr    strnicmp
  706.     bne    9f
  707. ;-mpu[N1[,N2…]]
  708.     moveq.l    #-1,d1
  709.     tst.b    (a0)
  710.     beq    3f
  711.     moveq.l    #0,d1
  712. 1:    bsr    stou
  713.     bcs    71f
  714.     cmp.l    #8,d0
  715.     bcc    71f
  716.     bset.l    d0,d1
  717.     cmpi.b    #',',(a0)+
  718.     beq    1b
  719.     tst.b    -(a0)
  720.     bne    71f
  721. 2:    moveq.l    #%10100000,d0
  722.     and.b    d1,d0
  723.     bne    71f
  724. 3:    move.b    d1,mpu_select
  725.     bra    10b
  726.  
  727. 9:    lea.l    (str_normal,pc),a1
  728.     bsr    stricmp
  729.     bne    9f
  730. ;-normal
  731.     move.w    #NORMAL_SPEED,cdrom_speed
  732.     bra    10b
  733.  
  734. 9:    lea.l    (str_fast,pc),a1
  735.     bsr    stricmp
  736.     bne    9f
  737. ;-fast
  738.     move.w    #FAST_SPEED,cdrom_speed
  739.     bra    10b
  740.  
  741. 9:    lea.l    (str_ultra,pc),a1
  742.     bsr    stricmp
  743.     bne    9f
  744. ;-ultra
  745.     move.w    #ULTRA_SPEED,cdrom_speed
  746.     bra    10b
  747.  
  748. 9:    lea.l    (str_tl,pc),a1
  749.     moveq.l    #2,d0
  750.     bsr    strnicmp
  751.     bne    9f
  752.     bsr    stou
  753.     bcs    8f
  754. ;-tl<n>
  755.   .if 0
  756.     tst.b    (a0)
  757.     bne    81f
  758.     cmp.l    #TL_LOWER_LIMIT,d0
  759.     blo    82f
  760.     cmp.l    #TL_UPPER_LIMIT,d0
  761.     bhi    82f
  762.     move.b    d0,max_tl
  763.   .endif
  764.     bra    10b
  765. 8:    lea.l    (1,a3),a0
  766.  
  767.   .if TEST_DEBUG_SWITCH
  768. 9:    lea.l    (str_debug,pc),a1
  769.     bsr    stricmp
  770.     bne    9f
  771. ;-debug
  772.     st.b    debug_flag
  773.     bra    10b
  774.  
  775. 9:    lea.l    (str_debugp,pc),a1
  776.     moveq.l    #6,d0
  777.     bsr    strnicmp
  778.     bne    9f
  779. ;-debugp[=]<n>
  780.     cmpi.b    #'=',(a0)
  781.     beq    1f
  782.     tst.b    (a0)
  783.     beq    88f
  784.     bsr    stou
  785.     bcs    8f
  786.     bra    2f
  787. 1:    addq.l    #1,a0
  788.     bsr    stou
  789.     bcs    88f
  790. 2:    beq    88f
  791.     move.l    d0,debugp
  792.     tst.b    (a0)
  793.     bne    88f
  794.     bra    10b
  795. 8:    lea.l    (1,a3),a0
  796.  
  797. 9:    lea.l    (str_debugb,pc),a1
  798.     moveq.l    #6,d0
  799.     bsr    strnicmp
  800.     bne    9f
  801. ;-debugb[=]<n>
  802.     cmpi.b    #'=',(a0)
  803.     beq    1f
  804.     tst.b    (a0)
  805.     beq    88f
  806.     bsr    stou
  807.     bcs    8f
  808.     bra    2f
  809. 1:    addq.l    #1,a0
  810.     bsr    stou
  811.     bcs    88f
  812. 2:    beq    88f
  813.     move.l    d0,debugb
  814.     tst.b    (a0)
  815.     bne    88f
  816.     bra    10b
  817. 8:    lea.l    (1,a3),a0
  818.  
  819. 9:    lea.l    (str_debugm,pc),a1
  820.     moveq.l    #6,d0
  821.     bsr    strnicmp
  822.     bne    9f
  823. ;-debugm[=]<n>
  824.     cmpi.b    #'=',(a0)
  825.     beq    1f
  826.     tst.b    (a0)
  827.     beq    88f
  828.     bsr    stou
  829.     bcs    8f
  830.     bra    2f
  831. 1:    addq.l    #1,a0
  832.     bsr    stou
  833.     bcs    88f
  834. 2:    beq    88f
  835.     move.l    d0,debugm
  836.     tst.b    (a0)
  837.     bne    88f
  838.     bra    10b
  839. 8:    lea.l    (1,a3),a0
  840.  
  841. 9:    lea.l    (str_debugs,pc),a1
  842.     moveq.l    #6,d0
  843.     bsr    strnicmp
  844.     bne    9f
  845. ;-debugs[=]<n>
  846.     cmpi.b    #'=',(a0)
  847.     beq    1f
  848.     tst.b    (a0)
  849.     beq    88f
  850.     bsr    stou
  851.     bcs    8f
  852.     bra    2f
  853. 1:    addq.l    #1,a0
  854.     bsr    stou
  855.     bcs    88f
  856. 2:    beq    88f
  857.     move.l    d0,debugs
  858.     tst.b    (a0)
  859.     bne    88f
  860.     bra    10b
  861. 8:    lea.l    (1,a3),a0
  862.   .endif
  863.  
  864. 9:    lea.l    (str_xx,pc),a1
  865.     moveq.l    #2,d0
  866.     bsr    strnicmp
  867.     bne    9f
  868. ;-xx
  869.     tst.b    (a0)
  870.     bne    @f
  871.     moveq.l    #-1,d0
  872.     move.w    d0,param_file_format
  873.     move.l    d0,param_file_frequency
  874.     bra    10b
  875. @@:    bsr    stou
  876.     bcs    8f
  877.     moveq.l    #MXX4,d1
  878.     subq.l    #1,d0
  879.     blo    8f
  880.     beq    @f
  881.     subq.l    #1,d0
  882.     bne    8f
  883.     moveq.l    #SXX4,d1
  884. @@:    cmpi.b    #',',(a0)+
  885.     bne    8f
  886.     bsr    stou
  887.     bcs    8f
  888.     cmp.l    #MXX4,d1
  889.     bne    1f
  890.     cmp.l    #MIN_FREQUENCY_MONO,d0
  891.     blo    8f
  892.     cmp.l    #MAX_FREQUENCY_MONO,d0
  893.     bhi    8f
  894.     bra    2f
  895. 1:    cmp.l    #MIN_FREQUENCY_STEREO,d0
  896.     blo    8f
  897.     cmp.l    #MAX_FREQUENCY_STEREO,d0
  898.     bhi    8f
  899. 2:    cmpi.b    #',',(a0)+
  900.     bne    8f
  901.     move.w    d1,param_file_format
  902.     move.l    d0,param_file_frequency
  903.     lea.l    xx_table,a1
  904.     moveq.l    #32-1,d1
  905. 1:    bsr    stou
  906.     bcs    2f
  907. *    cmp.l    #127,d0
  908. *    bhi    8f
  909.     move.w    d0,(a1)+
  910.     cmpi.b    #',',(a0)+
  911.     dbne    d1,1b
  912.     subq.l    #1,a0
  913. 2:
  914. *    tst.b    (a0)
  915. *    bne    8f
  916.     bra    10b
  917. 8:    lea.l    (1,a3),a0
  918.  
  919. 9:
  920.   .if 0    ;標準入力'-'に範囲を指定できなくなるので削除
  921.     move.l    a0,-(sp)
  922.     bsr    stou
  923.     movea.l    (sp)+,a0
  924.     bcs    88f            ;'-'で始まっているファイル名は受け付けない
  925.   .endif
  926.     subq.l    #1,a0
  927.  
  928. ;'-'だけか'-'以外で始まっている
  929. 20:
  930.     move.b    current_machine_map,d0
  931.     and.b    mac_select,d0
  932.     beq    10b
  933.     move.b    current_mpu_map,d0
  934.     and.b    mpu_select,d0
  935.     beq    10b
  936.  
  937.     lea.l    (str_all,pc),a1
  938.     bsr    stricmp
  939.     bne    9f
  940. ;ALL
  941.     cmp.l    #param_buf_end,a2
  942.     bcc    72f
  943.     move.l    a3,(pb_ptr,a2)        ;NULLへのポインタ
  944.     sf.b    (a3)+
  945.     clr.l    (pb_rangetype,a2)    ;範囲指定なし
  946.     move.l    #$80000000,(pb_trktop_0,a2)    ;開始トラック
  947.     move.l    #$7FFFFFFF,(pb_trkbtm_0,a2)    ;終了トラック
  948.     move.l    #$80000000,(pb_idxtop_0,a2)    ;開始インデックス
  949.     move.l    #$7FFFFFFF,(pb_idxbtm_0,a2)    ;終了インデックス
  950.     move.l    #$80000000,(pb_top_0,a2)    ;開始位置
  951.     move.l    #$7FFFFFFF,(pb_btm_0,a2)    ;終了位置
  952.     lea.l    (pb_size,a2),a2
  953.     bra    10b
  954.  
  955. 9:
  956.  
  957. ;'-'だけかファイル名かトラック番号
  958.  
  959. ;','による分解を行う
  960. 31:    moveq.l    #',',d0
  961.     bsr    strchr
  962.     move.l    d0,d7
  963.     bmi    @f
  964.     lea.l    (a0,d0.l),a1
  965.     sf.b    (a1)+
  966.     move.l    a1,d7
  967. @@:
  968.     tst.b    (a0)
  969.     beq    39f
  970.  
  971.     cmp.l    #param_buf_end,a2
  972.     bcc    72f
  973.  
  974.     movem.l    d1-d6,-(sp)
  975.     bsr    get_suffix_range_trkidx
  976.     movem.l    d1-d6,(pb_trktop_0,a2)
  977.     movem.l    (sp)+,d1-d6
  978.     bmi    67f            ;範囲指定が不正
  979.     move.l    d0,(pb_rangetype,a2)
  980.  
  981.     move.l    a3,(pb_ptr,a2)
  982.     move.w    param_file_format,(pb_format,a2)
  983.     move.l    param_file_frequency,(pb_frequency,a2)
  984.  
  985.     lea.l    (pb_size,a2),a2
  986.  
  987.     movea.l    a3,a0
  988.     bsr    strchr0
  989.     lea.l    (1,a0),a3
  990.  
  991. 39:    movea.l    d7,a0
  992.     tst.l    d7
  993.     bpl    31b
  994.  
  995.     bra    10b
  996.  
  997. 98:    moveq.l    #0,d0
  998. 99:    rts
  999.  
  1000. 67:    move.w    #EXIT_ILLEGAL_RANGE,exit_code
  1001.     lea.l    (m_illegal_range,pc),a0
  1002.     bra    89f
  1003. 80:    move.w    #EXIT_ILLEGAL_ID,exit_code
  1004.     lea.l    (m_illegal_id,pc),a0
  1005.   .if 0
  1006.     bra    89f
  1007. 81:    move.w    #EXIT_ILLEGAL_TL,exit_code
  1008.     lea.l    (m_illegal_tl,pc),a0
  1009.     bra    89f
  1010. 82:    move.w    #EXIT_OUTSIDE_TL,exit_code
  1011.     lea.l    (m_outside_tl,pc),a0
  1012.     bra    89f
  1013.   .endif
  1014. 83:    move.w    #EXIT_ILLEGAL_V,exit_code
  1015.     lea.l    (m_illegal_v,pc),a0
  1016.     bra    89f
  1017. 84:    move.w    #EXIT_OUTSIDE_V,exit_code
  1018.     lea.l    (m_outside_v,pc),a0
  1019.     bra    89f
  1020. 85:    move.w    #EXIT_ILLEGAL_B,exit_code
  1021.     lea.l    (m_illegal_b,pc),a0
  1022.     bra    89f
  1023. 86:    move.w    #EXIT_OUTSIDE_B,exit_code
  1024.     lea.l    (m_outside_b,pc),a0
  1025.   .if 0
  1026.     bra    89f
  1027. 75:    move.w    #EXIT_ILLEGAL_Z,exit_code
  1028.     lea.l    (m_illegal_z,pc),a0
  1029.     bra    89f
  1030. 76:    move.w    #EXIT_OUTSIDE_Z,exit_code
  1031.     lea.l    (m_outside_z,pc),a0
  1032.   .endif
  1033.     bra    89f
  1034. 77:    move.w    #EXIT_ILLEGAL_FI,exit_code
  1035.     lea.l    (m_illegal_fi,pc),a0
  1036.     bra    89f
  1037. 78:    move.w    #EXIT_OUTSIDE_FI,exit_code
  1038.     lea.l    (m_outside_fi,pc),a0
  1039.     bra    89f
  1040. 73:    move.w    #EXIT_ILLEGAL_FO,exit_code
  1041.     lea.l    (m_illegal_fo,pc),a0
  1042.     bra    89f
  1043. 74:    move.w    #EXIT_OUTSIDE_FO,exit_code
  1044.     lea.l    (m_outside_fo,pc),a0
  1045.     bra    89f
  1046. 68:    move.w    #EXIT_ILLEGAL_INT,exit_code
  1047.     lea.l    (m_illegal_int,pc),a0
  1048.     bra    89f
  1049. 69:    move.w    #EXIT_OUTSIDE_INT,exit_code
  1050.     lea.l    (m_outside_int,pc),a0
  1051.     bra    89f
  1052. 72:    move.w    #EXIT_TOO_MANY_PARAMS,exit_code
  1053.     lea.l    (m_too_many_params,pc),a0
  1054.     bra    89f
  1055. 70:    move.w    #EXIT_ILLEGAL_MAC,exit_code
  1056.     lea.l    (m_illegal_mac,pc),a0
  1057.     bra    89f
  1058. 71:    move.w    #EXIT_ILLEGAL_MPU,exit_code
  1059.     lea.l    (m_illegal_mpu,pc),a0
  1060.     bra    89f
  1061. 87:    move.w    #EXIT_OBJECT_FILENAME,exit_code
  1062.     lea.l    (m_object_filename,pc),a0
  1063. 89:    bsr    print_banner
  1064.     bsr    eaprintcrlf
  1065.     bra    90f
  1066. 88:    move.w    #EXIT_UNKNOWN_SWITCH,exit_code
  1067.     bsr    print_banner
  1068.     bsr    print_usage
  1069. 90:    moveq.l    #-1,d0
  1070.     rts
  1071.  
  1072. param_env_name::    .dc.b    PROGNAME,0
  1073. cdrom_env_name::    .dc.b    'CDROM',0
  1074.  
  1075. str_bass:        .dc.b    'bass',0
  1076. str_hicut:        .dc.b    'hicut',0
  1077. str_stereo:        .dc.b    'stereo',0
  1078. str_mono:        .dc.b    'mono',0
  1079. str_fi:            .dc.b    'fi',0
  1080. str_fo:            .dc.b    'fo',0
  1081. str_silent:        .dc.b    'silent',0
  1082. str_weigh:        .dc.b    'weigh',0
  1083. str_zerosp:        .dc.b    'zerosp',0
  1084. str_reverse:        .dc.b    'reverse',0
  1085. str_drama:        .dc.b    'drama',0
  1086. str_hard:        .dc.b    'hard',0
  1087. str_soft:        .dc.b    'soft',0
  1088. str_force:        .dc.b    'force',0
  1089. str_tdpause:        .dc.b    'tdpause',0
  1090. str_onmem:        .dc.b    'onmem',0
  1091. str_preconv:        .dc.b    'preconv',0
  1092. str_himem:        .dc.b    'himem',0
  1093. str_sony:        .dc.b    'sony',0
  1094. str_toshiba:        .dc.b    'toshiba',0
  1095. str_m16:        .dc.b    'm16',0
  1096. str_m19:        .dc.b    'm19',0
  1097. str_m22:        .dc.b    'm22',0
  1098. str_m24:        .dc.b    'm24',0
  1099. str_m32:        .dc.b    'm32',0
  1100. str_m38:        .dc.b    'm38',0
  1101. str_m44:        .dc.b    'm44',0
  1102. str_m48:        .dc.b    'm48',0
  1103. str_s16:        .dc.b    's16',0
  1104. str_s19:        .dc.b    's19',0
  1105. str_s22:        .dc.b    's22',0
  1106. str_s24:        .dc.b    's24',0
  1107. str_s32:        .dc.b    's32',0
  1108. str_s38:        .dc.b    's38',0
  1109. str_s44:        .dc.b    's44',0
  1110. str_s48:        .dc.b    's48',0
  1111. str_pcm:        .dc.b    'pcm',0
  1112. str_p16:        .dc.b    'p16',0
  1113. str_loop:        .dc.b    'loop',0
  1114. str_extra:        .dc.b    'extra',0
  1115. str_lq:            .dc.b    'lq',0
  1116. str_hq:            .dc.b    'hq',0
  1117. str_sq:            .dc.b    'sq',0
  1118. str_int:        .dc.b    'int',0
  1119. str_id:            .dc.b    'id',0
  1120. str_mac:        .dc.b    'mac',0
  1121. str_mpu:        .dc.b    'mpu',0
  1122. str_normal:        .dc.b    'normal',0
  1123. str_fast:        .dc.b    'fast',0
  1124. str_ultra:        .dc.b    'ultra',0
  1125. str_tl:            .dc.b    'tl',0
  1126.  
  1127.   .if TEST_DEBUG_SWITCH
  1128. str_debug:        .dc.b    'debug',0
  1129. str_debugp:        .dc.b    'debugp',0
  1130. str_debugb:        .dc.b    'debugb',0
  1131. str_debugm:        .dc.b    'debugm',0
  1132. str_debugs:        .dc.b    'debugs',0
  1133.   .endif
  1134.  
  1135. str_xx:            .dc.b    'xx',0
  1136.  
  1137. str_all:        .dc.b    'all',0
  1138.  
  1139. str_hyphen:        .dc.b    '-',0
  1140. str_dot_fmp:        .dc.b    '.fmp',0
  1141.  
  1142. m_illegal_range:    .dc.b    '再生範囲の範囲指定が間違っています',0
  1143.  
  1144. m_illegal_id:        .dc.b    'SCSI-ID の指定 (-id) が異常です',0
  1145.   .if 0
  1146. m_illegal_tl:        .dc.b    'トータルレベルの指定 (-tl) が異常です',0
  1147. m_outside_tl:        .dc.b    'トータルレベルの指定 (-tl) が範囲外です',0
  1148.   .endif
  1149. m_illegal_v:        .dc.b    'ボリュームの指定 (-v) が異常です',0
  1150. m_outside_v:        .dc.b    'ボリュームの指定 (-v) が範囲外です',0
  1151. m_illegal_b:        .dc.b    'バッファサイズの指定 (-b) が異常です',0
  1152. m_outside_b:        .dc.b    'バッファサイズの指定 (-b) が範囲外です',0
  1153.   .if 0
  1154. m_illegal_z:        .dc.b    '発声下限レベルの指定 (-z) が異常です',0
  1155. m_outside_z:        .dc.b    '発声下限レベルの指定 (-z) が範囲外です',0
  1156.   .endif
  1157. m_illegal_fi:        .dc.b    'フェードイン速度の指定 (-fi) が異常です',0
  1158. m_outside_fi:        .dc.b    'フェードイン速度の指定 (-fi) が範囲外です',0
  1159. m_illegal_fo:        .dc.b    'フェードアウト速度の指定 (-fo) が異常です',0
  1160. m_outside_fo:        .dc.b    'フェードアウト速度の指定 (-fo) が範囲外です',0
  1161. m_illegal_int:        .dc.b    '再生周波数の指定 (-int) が異常です',0
  1162. m_outside_int:        .dc.b    '再生周波数の指定 (-int) が範囲外です',0
  1163. m_too_many_params:    .dc.b    '引数が多すぎます',0
  1164. m_object_filename:    .dc.b    'オブジェクトファイル名の指定 (-c) が異常です',0
  1165. m_illegal_mac:        .dc.b    '機種の指定 (-mac) が異常です',0
  1166. m_illegal_mpu:        .dc.b    'MPU の指定 (-mpu) が異常です',0
  1167.     .even
  1168.  
  1169.     .data
  1170.     .even
  1171. param_file_format:    .dc.w    -1    ;ファイルのフォーマット
  1172.                 ;    -1    指定なし
  1173.                 ;    0    SS16B(ステレオ,Signed-16bit,Big-endian)
  1174.                 ;    1    MS16B(モノラル,Signed-16bit,Big-endian)
  1175.     .align    4
  1176. param_file_frequency:    .dc.l    -1    ;ファイルのサンプリング周波数
  1177.  
  1178.     .align    4
  1179. param_bufunt::        .dc.l    -1
  1180. volume::        .dc.l    DEFAULT_VOLUME
  1181.  
  1182.   .if 0
  1183.     .align    4
  1184. lower_limit:        .dc.l    -1    ;発声下限レベル(指定なし)
  1185.   .endif
  1186.  
  1187.     .align    4
  1188. env_scsiid:        .dc.l    -1    ;lun,id
  1189. param_scsiid::        .dc.l    -1    ;lun,id
  1190.  
  1191. bass_flag::        .dc.b    0    ;-1=バスブースターを使用する
  1192. hicut_flag::        .dc.b    0    ;-1=ハイカットフィルタを使用する
  1193. mono_flag::        .dc.b    0    ;-1=モノラル再生
  1194. silent_flag::        .dc.b    0    ;-1=サイレントモード(メッセージを抑制)
  1195.   .if 0
  1196. weigh_flag:        .dc.b    0    ;-1=音圧制御
  1197.   .endif
  1198.   .if 0
  1199. reverse_flag:        .dc.b    0    ;-1=リバースモード
  1200.   .endif
  1201.   .if 0
  1202. drama_flag:        .dc.b    0    ;-1=ドラマモード
  1203.   .endif
  1204. hard_soft::        .dc.b    1    ;-1=設定なし,0=ハード転送,1=ソフト転送
  1205. force_flag::        .dc.b    0    ;-1=Medium Errorがあっても再生を続行する
  1206. tdpause_flag::        .dc.b    -1    ;-1=TIMER-DをHumanから奪う
  1207. onmem_flag::        .dc.b    0    ;-1=バッファ1つでオンメモリ動作
  1208. himem_flag::        .dc.b    -1    ;-1=ハイメモリを使う
  1209. loop_flag::        .dc.b    0    ;-1=ループ再生
  1210. extra_flag::        .dc.b    0    ;-1=extraモード
  1211. list_flag::        .dc.b    0    ;-1=CDのトラックの一覧表示
  1212. conv_flag::        .dc.b    0    ;-1=.fmpファイルへの変換
  1213.  
  1214. fadein_speed::        .dc.b    DEFAULT_ATTACK_RATE    ;フェードイン速度(1~31,大きいほど速い)
  1215. fadeout_speed::        .dc.b    DEFAULT_FADEOUT_SPEED    ;フェードアウト速度(0~31,大きいほど速い)
  1216.  
  1217. mac_select:        .dc.b    -1    ;ファイルを再生する機種の選択
  1218. mpu_select:        .dc.b    -1    ;ファイルを再生するMPUの選択
  1219.   .if 0
  1220. max_tl:            .dc.b    MAX_TL
  1221.   .endif
  1222. quality_level::        .dc.b    -1    ;再生品質
  1223.                     ; -1=指定なし
  1224.                     ; 0=サンプリング周波数の変換は重複・間引き
  1225.                     ; 1=サンプリング周波数の変換は直線補間
  1226.                     ; 2=サンプリング周波数の変換は面積補間
  1227. output_timerd_count::    .dc.b    -1    ;TIMERDのカウント
  1228.     .even
  1229. cdrom_speed::        .dc.w    -1    ;CD-ROMの転送速度
  1230.                     ; -1=指定なし,0=normal,1=fast,255=ultra
  1231.  
  1232.     .align    4
  1233. output_filename_ptr::    .dc.l    0
  1234.  
  1235.     .bss
  1236. ;パラメータのバッファ
  1237. ;    +0.w    +2.w    +4.l    +8.l        type
  1238. ;    0    format    0    frequency    -
  1239. ;    0    format    ptr    frequency    ファイル名
  1240. ;    1    0    N    N        N
  1241. ;    1    0    N    -1        N-
  1242. ;    1    0    0    N        -N
  1243. ;    1    0    N1    N2        N1-N2
  1244. ;    1    0    0    -1        all
  1245. ;***    2    0    msf    -1        msf[-]
  1246. ;***    2    0    msf1    msf2        msf1-msf2
  1247. ;***    2    n    msf    -1        n/msf[-]
  1248. ;***    2    n    msf1    msf2        n/msf1-msf2
  1249. ;    -1    -1    0    0        パラメータの終わり
  1250.     .align    4
  1251. param_buf::        .ds.b    pb_size*MAX_PARAMS
  1252. param_buf_end:        .ds.b    pb_size
  1253.     .align    4
  1254. current_param_ptr::    .ds.l    1    ;現在のパラメータバッファを指すポインタ
  1255. next_param_ptr::    .ds.l    1    ;次のパラメータバッファを指すポインタ
  1256.  
  1257. param_copy1:        .ds.b    1024    ;環境変数を分解したもの
  1258. param_copy2:        .ds.b    1024    ;コマンドラインを分解したもの
  1259. param_env_work::    .ds.b    1024
  1260. cdrom_env_work::    .ds.b    1024
  1261.  
  1262.  
  1263. ;----------------------------------------------------------------
  1264. ;----------------------------------------------------------------
  1265. ;1フレームあたりの秒数
  1266. ;    CDDA
  1267. ;        44.1kHz(stereo,16bit)    1/75秒
  1268. ;    XA
  1269. ;        37.8kHz(stereo,4bit)    4/75秒
  1270. ;        37.8kHz(mono,4bit)    8/75秒
  1271. ;        18.9kHz(stereo,4bit)    8/75秒
  1272. ;        18.9kHz(mono,4bit)    16/75秒
  1273. ;16/75秒あたりのフレーム数
  1274. ;    CDDA
  1275. ;        44.1kHz(stereo,16bit)    16フレーム
  1276. ;    XA
  1277. ;        37.8kHz(stereo,4bit)    4フレーム
  1278. ;        37.8kHz(mono,4bit)    2フレーム
  1279. ;        18.9kHz(stereo,4bit)    2フレーム
  1280. ;        18.9kHz(mono,4bit)    1フレーム
  1281. ;1秒あたりのフレーム数
  1282. ;    CDDA
  1283. ;        44.1kHz(stereo,16bit)    75フレーム
  1284. ;    XA
  1285. ;        37.8kHz(stereo,4bit)    75/4フレーム
  1286. ;        37.8kHz(mono,4bit)    75/8フレーム
  1287. ;        18.9kHz(stereo,4bit)    75/8フレーム
  1288. ;        18.9kHz(mono,4bit)    75/16フレーム
  1289. ;16秒あたりのフレーム数
  1290. ;    CDDA
  1291. ;        44.1kHz(stereo,16bit)    1200フレーム
  1292. ;    XA
  1293. ;        37.8kHz(stereo,4bit)    300フレーム
  1294. ;        37.8kHz(mono,4bit)    150フレーム
  1295. ;        18.9kHz(stereo,4bit)    150フレーム
  1296. ;        18.9kHz(mono,4bit)    75フレーム
  1297.  
  1298. ;----------------------------------------------------------------
  1299. ;文字列の末尾から<trk>.<idx>と<ofs>または<msf>の範囲を読み取って文字列から切り捨てる
  1300. ;    [~/]<trk>/<ofs>[-]
  1301. ;    [~/]<trk>/<ofs>-<ofs>
  1302. ;    [~/]<trk>/-<ofs>
  1303. ;    [~/]<trk>/<msf>[-]
  1304. ;    [~/]<trk>/<msf>-<msf>
  1305. ;    [~/]<trk>/-<msf>
  1306. ;    [~/]<trk>.<idx>/<ofs>[-]
  1307. ;    [~/]<trk>.<idx>/<ofs>-<ofs>
  1308. ;    [~/]<trk>.<idx>/-<ofs>
  1309. ;    [~/]<trk>.<idx>/<msf>[-]
  1310. ;    [~/]<trk>.<idx>/<msf>-<msf>
  1311. ;    [~/]<trk>.<idx>/-<msf>
  1312. ;    [~/]<trk>.<idx>
  1313. ;    [~/]<trk>.<idx>-
  1314. ;    [~/]<trk>.-<idx>
  1315. ;    [~/]<trk>.<idx>-<idx>
  1316. ;    [~/]<trk>
  1317. ;    [~/]<trk>-
  1318. ;    [~/]<trk>-<trk>
  1319. ;    [~/]-<trk>
  1320. ;
  1321. ;    <trk> ::= <int>
  1322. ;    <idx> ::= <int>
  1323. ;    <ofs> ::= :<int>
  1324. ;    <msf> ::= <int>:<int>[:<int>]
  1325. ;<a0.l:文字列の先頭アドレス
  1326. ;>d0.l:1=<ofs>の範囲,2=<msf>の範囲
  1327. ;    0=範囲指定はない
  1328. ;    -1=範囲指定が不正
  1329. ;>d1.l:(pl)開始トラック(省略時は$80000000),(mi)変化しない
  1330. ;>d2.l:(pl)終了トラック(省略時は$7FFFFFFF),(mi)変化しない
  1331. ;>d3.l:(pl)開始インデックス(省略時は$80000000),(mi)変化しない
  1332. ;>d4.l:(pl)終了インデックス(省略時は$7FFFFFFF),(mi)変化しない
  1333. ;>d5.l:(pl)始点(省略時は$80000000),(mi)変化しない
  1334. ;>d6.l:(pl)終点(省略時は$7FFFFFFF),(mi)変化しない
  1335. ;>a0.l:文字列の先頭アドレス
  1336. ;>n-flag:mi=範囲指定が不正
  1337. ;>z-flag:eq=範囲指定ではない
  1338.     .text
  1339.     .align    4,$2048
  1340. get_suffix_range_trkidx:
  1341.     movem.l    d1-d7/a0,-(sp)
  1342.     bsr    get_suffix_range_ofsmsf
  1343.     bmi    99f            ;エラー
  1344.     sne.b    d7            ;0=範囲指定がない,-1=範囲指定がある
  1345.     move.l    d1,d5            ;d5=始点
  1346.     move.l    d2,d6            ;d6=終点
  1347.     move.l    a0,-(sp)        ;文字列の先頭
  1348.     move.l    d0,-(sp)        ;範囲の種類
  1349.     moveq.l    #'/',d0            ;最後の'/'を探す
  1350.     bsr    strrchr
  1351.     bmi    @f
  1352.     adda.l    d0,a0            ;最後の'/'の位置
  1353.     move.l    a0,(4,sp)        ;最後の'/'の位置
  1354.     addq.l    #1,a0            ;最後の'/'の直後
  1355. @@:    cmpi.b    #'-',(a0)
  1356.     beq    37f            ;先頭が'-'
  1357.     bsr    stou
  1358.     bcs    98f            ;先頭が'-'でも数字でもないのでエラー
  1359. ;先頭が数字
  1360.     tst.b    d7
  1361.     bne    @f            ;範囲指定があるので1トラックのみ
  1362.     cmpi.b    #'-',(a0)
  1363.     beq    34f            ;数字の直後が'-'
  1364. @@:
  1365. ;数字の直後が'-'以外の文字なので1トラックのみ
  1366.     move.l    d0,d1            ;d1=開始トラック
  1367.     move.l    d0,d2            ;d2=終了トラック
  1368.     move.l    #$80000000,d3        ;d3=開始インデックス
  1369.     move.l    #$7FFFFFFF,d4        ;d4=終了インデックス
  1370.     tst.b    (a0)
  1371.     beq    97f            ;トラック指定あり,インデックスなし
  1372.     cmpi.b    #'.',(a0)
  1373.     bne    98f            ;トラック番号の直後に'.'以外の文字があるのでエラー
  1374.     addq.l    #1,a0
  1375.     cmpi.b    #'-',(a0)
  1376.     beq    33f            ;'.'の直後が'-'
  1377.     bsr    stou
  1378.     bcs    98f            ;'.'の直後が'-'でも数字でもないのでエラー
  1379. ;'.'の直後が数字
  1380.     move.l    d0,d3            ;d3=開始インデックス
  1381.     move.l    d0,d4            ;d4=終了インデックス
  1382.     tst.b    d7
  1383.     bne    31f            ;範囲指定があるのでインデックスは1つのはず
  1384.     cmpi.b    #'-',(a0)
  1385.     bne    31f            ;インデックスは1つ
  1386.     move.l    #$7FFFFFFF,d4        ;d4=終了インデックス
  1387.     addq.l    #1,a0
  1388.     tst.b    (a0)
  1389.     beq    97f            ;終了インデックス省略
  1390. 30:    bsr    stou
  1391.     bcs    98f            ;終了インデックスエラー
  1392.     move.l    d0,d4            ;d4=終了インデックス
  1393.     cmp.l    d3,d4
  1394.     blt    96f            ;開始インデックス>終了インデックス
  1395. 31:    tst.b    (a0)
  1396.     beq    97f            ;トラック指定あり,インデックスあり
  1397.     bra    98f            ;インデックスの末尾がおかしい
  1398.  
  1399. ;'.'の直後が'-'
  1400. 33:    move.l    #$80000000,d3        ;d3=開始インデックス
  1401.     addq.l    #1,a0
  1402.     bra    30b
  1403.  
  1404. ;数字の直後が'-'
  1405. 34:    move.l    #$80000000,d3        ;d3=開始インデックス
  1406.     move.l    #$7FFFFFFF,d4        ;d4=終了インデックス
  1407.     addq.l    #1,a0
  1408.     tst.b    (a0)
  1409.     beq    36f            ;数字'-'の直後に文字がないので開始のみ
  1410.     move.l    d0,d1            ;d1=開始トラック
  1411.     bsr    stou
  1412.     bcs    98f            ;数字'-'の直後に数字以外の文字があるのでエラー
  1413. 35:    move.l    d0,d2            ;d2=終了トラック
  1414.     cmp.l    d1,d2
  1415.     blt    96f            ;開始トラック>終了トラック
  1416.     bra    97f
  1417.  
  1418. ;開始トラックのみ
  1419. 36:    move.l    d0,d1            ;d1=開始トラック
  1420.     move.l    #$7FFFFFFF,d2        ;d2=終了トラック
  1421. 97:    move.l    (sp)+,d0
  1422.     movea.l    (sp)+,a0
  1423.     sf.b    (a0)            ;clr.b (a0)はフラグを破壊するので不可
  1424.     lea.l    (24,sp),sp
  1425.     movem.l    (sp)+,d7/a0
  1426. ;    tst.l    d0            ;上のmove.l (sp)+,d0の結果が使えるので省略
  1427.     rts
  1428.  
  1429. ;先頭が'-'
  1430. 37:    tst.b    d7
  1431.     bne    98f            ;範囲指定があるのでエラー
  1432.     move.l    #$80000000,d1        ;d1=開始トラック
  1433.     addq.l    #1,a0
  1434.     bsr    stou
  1435.     bcs    98f            ;'-'の直後に数字がないのでエラー
  1436.     move.l    #$80000000,d3        ;d3=開始インデックス
  1437.     move.l    #$7FFFFFFF,d4        ;d4=終了インデックス
  1438.     tst.b    (a0)
  1439.     beq    35b            ;'-'数字の直後に文字がないので終了のみ
  1440. ;'-'数字の直後に文字があるのでエラー
  1441. 98:    move.l    #$80000000,d1        ;d1=開始トラック
  1442.     move.l    #$7FFFFFFF,d2        ;d2=終了トラック
  1443.     move.l    #$80000000,d3        ;d3=開始インデックス
  1444.     move.l    #$7FFFFFFF,d4        ;d4=終了インデックス
  1445.     move.l    (sp)+,d0
  1446.     lea.l    (4+24,sp),sp
  1447.     movem.l    (sp)+,d7/a0
  1448. ;    tst.l    d0            ;上のmove.l (sp)+,d0の結果が使えるので省略
  1449.     rts
  1450.  
  1451. 96:    addq.l    #8,sp
  1452.     moveq.l    #-1,d0
  1453. 99:    movem.l    (sp)+,d1-d7/a0
  1454.     tst.l    d0
  1455.     rts
  1456.  
  1457. ;----------------------------------------------------------------
  1458. ;文字列の末尾から<ofs>または<msf>の範囲指定を読み取って文字列から切り捨てる
  1459. ;    [~/]<ofs>[-]
  1460. ;    [~/]<ofs>-<ofs>
  1461. ;    [~/]-<ofs>
  1462. ;    [~/]<msf>[-]
  1463. ;    [~/]<msf>-<msf>
  1464. ;    [~/]-<msf>
  1465. ;<a0.l:文字列の先頭アドレス
  1466. ;>d0.l:1=<ofs>の範囲,2=<msf>の範囲
  1467. ;    0=範囲指定はない
  1468. ;    -1=範囲指定が不正
  1469. ;>d1.l:(pl)始点(省略時は$80000000),(mi)変化しない
  1470. ;>d2.l:(pl)終点(省略時は$7FFFFFFF),(mi)変化しない
  1471. ;>a0.l:文字列の先頭アドレス
  1472. ;>n-flag:mi=範囲指定が不正
  1473. ;>z-flag:eq=範囲指定ではない
  1474.     .text
  1475.     .align    4,$2048
  1476. get_suffix_range_ofsmsf:
  1477.     movem.l    d1-d2/a0,-(sp)
  1478.     move.l    a0,-(sp)        ;文字列の先頭
  1479.     moveq.l    #'/',d0            ;最後の'/'を探す
  1480.     bsr    strrchr
  1481.     bmi    @f
  1482.     adda.l    d0,a0            ;最後の'/'の位置
  1483.     move.l    a0,(sp)            ;最後の'/'の位置
  1484.     addq.l    #1,a0            ;最後の'/'の直後
  1485. @@:    bsr    get_range_ofsmsf
  1486.     beq    18f            ;範囲指定がない
  1487.     bmi    90f            ;範囲指定が不正
  1488.     tst.b    (a0)
  1489.     bne    89f            ;<NUL>で終わっていない
  1490.     movea.l    (sp)+,a0        ;'/'の位置('/'がないときは文字列の先頭)
  1491.     sf.b    (a0)            ;以降を切り捨てる
  1492.     addq.l    #8,sp
  1493.     bra    19f
  1494.  
  1495. 18:    lea.l    (4+8,sp),sp
  1496. 19:    movea.l    (sp)+,a0
  1497.     tst.l    d0
  1498.     rts
  1499.  
  1500. 89:    moveq.l    #-1,d0            ;<NUL>で終わっていない
  1501. 90:    addq.l    #4,sp
  1502.     movem.l    (sp)+,d1-d2/a0
  1503.     rts
  1504.  
  1505. ;----------------------------------------------------------------
  1506. ;文字列の先頭から<ofs>または<msf>の範囲指定を読み取る
  1507. ;    <ofs>[-]
  1508. ;    <ofs>-<ofs>
  1509. ;    -<ofs>
  1510. ;    <msf>[-]
  1511. ;    <msf>-<msf>
  1512. ;    -<msf>
  1513. ;<a0.l:文字列の先頭アドレス
  1514. ;>d0.l:1=<ofs>の範囲,2=<msf>の範囲
  1515. ;    0=範囲指定ではない
  1516. ;    -1=範囲指定が不正
  1517. ;>d1.l:(pl)始点(省略時は$80000000),(mi)変化しない
  1518. ;>d2.l:(pl)終点(省略時は$7FFFFFFF),(mi)変化しない
  1519. ;>a0.l:(pl)範囲指定の直後,(mi)変化しない
  1520. ;>n-flag:mi=範囲指定が不正
  1521. ;>z-flag:eq=範囲指定ではない
  1522.     .text
  1523.     .align    4,$2048
  1524. get_range_ofsmsf:
  1525.     movem.l    d1-d2/a0,-(sp)
  1526.     move.l    #$80000000,d1        ;始点($80000000=省略)
  1527.     cmpi.b    #'-',(a0)
  1528.     beq    10f
  1529.     bsr    get_ofs
  1530.     bpl    20f
  1531.     addq.l    #1,d0
  1532.     bmi    91f            ;<ofs>の指定が不正
  1533.     bsr    get_msf
  1534.     bpl    30f
  1535.     addq.l    #1,d0
  1536.     bmi    91f            ;<msf>の指定が不正
  1537. ;範囲指定なし
  1538. 90:    move.l    #$7FFFFFFF,d2        ;終点($7FFFFFFF=省略)
  1539.     addq.l    #8,sp
  1540.     movea.l    (sp)+,a0
  1541.     moveq.l    #0,d0            ;範囲指定なし
  1542.     rts
  1543.  
  1544. ;'-'で始まっている
  1545. ;    -<ofs>
  1546. ;    -<msf>
  1547. 10:    addq.l    #1,a0
  1548.     bsr    get_ofs
  1549.     bpl    25f            ;-<ofs>
  1550.     addq.l    #1,d0
  1551.     bmi    91f            ;<ofs>の指定が不正
  1552.     bsr    get_msf
  1553.     bpl    35f            ;-<msf>
  1554.     addq.l    #1,d0
  1555.     bpl    90b            ;'-'の直後が<ofs>,<msf>のいずれでもないので,
  1556.                     ;範囲指定なし
  1557. ;範囲指定が不正
  1558. 91:    movem.l    (sp)+,d1-d2/a0
  1559.     moveq.l    #-1,d0
  1560.     rts
  1561.  
  1562. ;<ofs>で始まっている
  1563. ;    <ofs>[-]
  1564. ;    <ofs>-<ofs>
  1565. 20:    move.l    d0,d1            ;d1=始点
  1566.     move.l    #$7FFFFFFF,d2        ;d2=終点($7FFFFFFF=省略)
  1567.     cmpi.b    #'-',(a0)
  1568.     bne    29f            ;'-'がないので始点のみ
  1569. ;<ofs>-
  1570.     addq.l    #1,a0
  1571.     bsr    get_ofs
  1572.     bpl    21f
  1573.     addq.l    #1,d0
  1574.     bmi    91b            ;<ofs>の指定が不正
  1575.     bra    29f
  1576.  
  1577. 21:    cmp.l    d1,d0
  1578.     blt    91b            ;始点>終点
  1579. 25:    move.l    d0,d2            ;d2=終点
  1580. 29:    lea.l    (12,sp),sp
  1581.     moveq.l    #1,d0            ;<ofs>の範囲
  1582.     rts
  1583.  
  1584. ;<msf>で始まっている
  1585. ;    <msf>[-]
  1586. ;    <msf>-<msf>
  1587. 30:    move.l    d0,d1            ;d1=始点
  1588.     move.l    #$7FFFFFFF,d2        ;d2=終点($7FFFFFFF=省略)
  1589.     cmpi.b    #'-',(a0)
  1590.     bne    39f            ;'-'がないので始点のみ
  1591. ;<msf>-
  1592.     addq.l    #1,a0
  1593.     bsr    get_msf
  1594.     bpl    31f
  1595.     addq.l    #1,d0
  1596.     bmi    91b            ;<ofs>の指定が不正
  1597.     bra    39f
  1598.  
  1599. 31:    cmp.l    d1,d0
  1600.     blt    91b            ;始点>終点
  1601. 35:    move.l    d0,d2            ;d2=終点
  1602. 39:    lea.l    (12,sp),sp
  1603.     moveq.l    #2,d0            ;<msf>の範囲
  1604.     rts
  1605.  
  1606. ;----------------------------------------------------------------
  1607. ;文字列の先頭から<ofs>の指定を読み取る
  1608. ;    :<ofs>
  1609. ;    ofs=0~2147483647
  1610. ;<a0.l:文字列の先頭アドレス
  1611. ;>d0.l:(pl)ofs(0~2147483647)
  1612. ;    -1=<ofs>の指定ではない
  1613. ;    -2=<ofs>の指定が不正
  1614. ;>a0.l:(pl)<ofs>の直後,(mi)変化しない
  1615. ;>n-flag:pl=<ofs>の指定があった,mi=エラー
  1616.     .text
  1617.     .align    4,$2048
  1618. get_ofs:
  1619.     move.l    a0,-(sp)
  1620.     cmpi.b    #':',(a0)+
  1621.     bne    89f            ;先頭が':'でないので<ofs>の指定ではない
  1622.     bsr    stoi
  1623.     bcs    88f            ;':'の直後に整数がない→<ofs>の指定が不正
  1624.     bmi    88f            ;<ofs>が負数→<ofs>の指定が不正
  1625.     addq.l    #4,sp
  1626. ;    tst.l    d0
  1627.     rts
  1628.  
  1629. ;<ofs>の指定が不正
  1630. 88:    moveq.l    #-2,d0
  1631.     bra    90f
  1632.  
  1633. ;<ofs>の指定ではない
  1634. 89:    moveq.l    #-1,d0
  1635. 90:    movea.l    (sp)+,a0
  1636.     rts
  1637.  
  1638. ;----------------------------------------------------------------
  1639. ;文字列の先頭から<msf>の指定を読み取る
  1640. ;    <msf> ::= <m>:<s>[:<f>]
  1641. ;    データの種類に関係なくfの単位は1/75秒
  1642. ;    <m> ::= 0~99
  1643. ;    <s> ::= 0~59
  1644. ;    <f> ::= 0~74
  1645. ;<a0.l:文字列の先頭アドレス
  1646. ;>d0.l:(pl)00mmssff
  1647. ;    bit 31~24    0
  1648. ;    bit 23~16    <m>    0~99
  1649. ;    bit 15~8    <s>    0~59
  1650. ;    bit 7~0    <f>    0~74,-1=省略
  1651. ;    -1=<msf>の指定ではない
  1652. ;    -2=<msf>の指定が不正
  1653. ;>a0.l:(pl)<msf>の指定の直後,(mi)変化しない
  1654. ;>n-flag:pl=<msf>の指定があった,mi=エラー
  1655.     .text
  1656.     .align    4,$2048
  1657. get_msf:
  1658.     move.l    a0,-(sp)
  1659.     clr.l    -(sp)            ;結果のワーク,最上位バイトは0
  1660.     bsr    stoi
  1661.     bcs    89f            ;先頭に<m>がないので<msf>の指定ではない
  1662.     cmp.l    #100,d0            ;<m>は0~99
  1663.     bcc    89f            ;<m>が0~99の範囲外(ここまでは不正扱いにしない)
  1664.     cmpi.b    #':',(a0)+
  1665.     bne    89f            ;<m>の直後に':'がないので<msf>の指定ではない
  1666.     move.b    d0,(1,sp)        ;<m>
  1667.     bsr    stoi
  1668.     bcs    88f            ;':'の直後に<s>がない→<msf>の指定が不正
  1669.     cmp.l    #60,d0            ;<s>は0~59
  1670.     bcc    88f            ;<m>が0~59の範囲外→<msf>の指定が不正
  1671.     move.b    d0,(2,sp)        ;<s>
  1672.     cmpi.b    #':',(a0)
  1673.     bne    20f            ;<s>の直後に':'がないので<f>は省略
  1674.     addq.l    #1,a0
  1675.     bsr    stoi
  1676.     bcs    88f            ;':'の直後に<f>がない→<msf>の指定が不正
  1677.     cmp.b    #75,d0            ;<f>は0~74
  1678.     bcc    88f            ;<f>が0~74の範囲外→<msf>の指定が不正
  1679.     move.b    d0,(3,sp)        ;f
  1680.     bra    29f
  1681.  
  1682. 20:    st.b    (3,sp)            ;<f>を省略したので<f>=-1
  1683. 29:    move.l    (sp)+,d0
  1684.     addq.l    #4,sp
  1685.     rts
  1686.  
  1687. ;<msf>の指定が不正
  1688. 88:    moveq.l    #-2,d0
  1689.     bra    90f
  1690.  
  1691. ;<msf>の指定ではない
  1692. 89:    moveq.l    #-1,d0
  1693. 90:    addq.l    #4,sp
  1694.     movea.l    (sp)+,a0
  1695.     rts
  1696.  
  1697. ;----------------------------------------------------------------
  1698. ;----------------------------------------------------------------
  1699. ;使用法を表示する
  1700.     .text
  1701.     .align    4,$2048
  1702. print_usage:
  1703.     movem.l    d0/a0,-(sp)
  1704.     lea.l    (m_usage,pc),a0
  1705.     bra    2f
  1706. 1:    bsr    inkey
  1707.     cmp.w    #$03,d0
  1708.     beq    9f
  1709.     cmp.w    #$1B,d0
  1710.     beq    9f
  1711.     bsr    tolower
  1712.     cmp.w    #'q',d0
  1713.     beq    9f
  1714. 2:    bsr    eprint
  1715.     bsr    strchr0
  1716.     addq.l    #1,a0
  1717.     tst.b    (a0)
  1718.     bne    1b
  1719. 3:    movem.l    (sp)+,d0/a0
  1720.     rts
  1721.  
  1722. 9:    bsr    crlf
  1723.     bra    3b
  1724.  
  1725. m_usage:    .dc.b    '◎機能',13,10
  1726.         .dc.b    '  ステレオの PCM データを内蔵 OPM のみで再生します',13,10
  1727.         .dc.b    '  再生できるデータ',13,10
  1728.         .dc.b    '    (1) PCM データが入っているファイル (.S44/.PCM/.AIF/.WAV/.FMP など)',13,10
  1729.         .dc.b    '    (2) CD の音声トラック (CDDA)',13,10
  1730.         .dc.b    '    (3) PlayStation の CDXA の圧縮音声データ (.STR/.XA/.X16/.X32 など)',13,10
  1731.         .dc.b    13,10
  1732.         .dc.b    '◎使用法',13,10
  1733.         .dc.b    '  > ',PROGNAME,' [スイッチ] {ファイル名|トラック番号} …',13,10
  1734.         .dc.b    '      コマンドラインの前に環境変数 ',PROGNAME,' の内容を解釈します',13,10
  1735.         .dc.b    '      [ESC]/[Q] で終了、[CTRL+C]/[BREAK]/[INTERRUPT]/POWER OFF で強制終了できます',13,10
  1736.         .dc.b    '      [TAB] でスキップ、[F] でフェードアウトできます',13,10
  1737.         .dc.b    13,10
  1738.         .dc.b    '○スイッチ',13,10
  1739.         .dc.b    '  チャンネル数',13,10
  1740.         .dc.b    '    -mono     モノラル再生',13,10
  1741.         .dc.b    '    -stereo   ステレオ再生 (デフォルト)',13,10
  1742.         .dc.b    '  ボリューム',13,10
  1743.         .dc.b    '    -v<n>     ボリューム (最小=1~最大=1024) [',STR_VOLUME,']',13,10
  1744.         .dc.b    '  サンプリング周波数の変換方式',13,10
  1745.         .dc.b    '    -lq       Low Quality (68000 のときデフォルト)',13,10
  1746.         .dc.b    '    -hq       High Quality (68030 のときデフォルト)',13,10
  1747.         .dc.b    '    -sq       Super Quality (68040/68060 のときデフォルト)',13,10
  1748.         .dc.b    '-more-',0,13
  1749.         .dc.b    10        ;-more-を消すとき削除する
  1750.         .dc.b    '  再生時のサンプリング周波数',13,10
  1751.         .dc.b    '    -int[=]<n>  再生時のサンプリング周波数の指定 (',STR_MIN_INT,'~',STR_MAX_INT,':割り込み間隔(μs))',13,10
  1752.         .dc.b    '             モノラル/ステレオ',13,10
  1753.         .dc.b    '      19 …  52632Hz / 26316Hz (68060 のときデフォルト)',13,10
  1754.         .dc.b    '      22 …  45455Hz / 22727Hz (68030 のときデフォルト)',13,10
  1755.         .dc.b    '      23 …  43478Hz / 21739Hz (68040 のときデフォルト)',13,10
  1756.         .dc.b    '      40 …  25000Hz / 12500Hz (68000 のときデフォルト)',13,10
  1757.         .dc.b    '      FMP ファイルを再生する場合は -int の指定は無効です',13,10
  1758.         .dc.b    '  フェードイン・フェードアウト',13,10
  1759.         .dc.b    '    -fi[[=]<n>]  フェードイン速度 (最低速=1~最高速=31,[',STR_FADEIN_SPEED,']) [',STR_ATTACK_RATE,']',13,10
  1760.         .dc.b    '    -fo[=]<n>  フェードアウト速度 (最低速=1~最高速=31) [',STR_FADEOUT_SPEED,']',13,10
  1761.         .dc.b    '      フェードアウトが完了すると自動的に再生が終了します',13,10
  1762.         .dc.b    '  フィルタ (仮実装)',13,10
  1763.         .dc.b    '    -bass     バスブースター (低音部を強調する)',13,10
  1764.         .dc.b    '    -hicut    ハイカットフィルタ (高周波成分を減らす)',13,10
  1765.         .dc.b    '      -bass と -hicut は同時に掛けられません (後から指定したほうだけ有効)',13,10
  1766.         .dc.b    '      -bass と -hicut は FMP/ADPCM/CDXA のデータには無効です',13,10
  1767.         .dc.b    '  データ変換',13,10
  1768.         .dc.b    '    -c <filename>[.fmp]  PCM を FMP フォーマットに変換してファイルに出力する',13,10
  1769.         .dc.b    '  その他',13,10
  1770.         .dc.b    '    -loop     ループ再生',13,10
  1771.         .dc.b    '    -b<n>     PCM バッファを約 n/6 MB 確保する [',STR_BUFUNT,']',13,10
  1772.         .dc.b    '    -himem    ハイメモリが使えればバッファをハイメモリに確保する (デフォルト)',13,10
  1773.         .dc.b    '    -onmem    オンメモリ動作 (ディスクアクセスしながら再生しない)',13,10
  1774.         .dc.b    '    -tdpause  TIMER-D 割り込みを Human から奪って使う (デフォルト)',13,10
  1775.         .dc.b    '    -silent   サイレントモード (エラー以外のメッセージを表示しない)',13,10
  1776.         .dc.b    '    -extra    拡張操作モード (後述)',13,10
  1777.         .dc.b    '-more-',0,13
  1778.         .dc.b    10        ;-more-を消すとき削除する
  1779.         .dc.b    '  再生環境の制限 (指定された環境のときだけ再生する)',13,10
  1780.         .dc.b    '    -mac<n,…>  本体の制限 (0=X68000,3=X68030)',13,10
  1781.         .dc.b    '    -mpu<n,…>  MPU の制限 (0=68000,3=68030,4=68040,6=68060)',13,10
  1782.         .dc.b    '      再生環境の制限はファイル名の手前に記述する必要があります',13,10
  1783.         .dc.b    13,10
  1784.         .dc.b    '(1) PCM データが入っているファイルを読み出して再生するとき',13,10
  1785.         .dc.b    '  ファイルを読み出して再生する',13,10
  1786.         .dc.b    '    ファイル名[/再生範囲]',13,10
  1787.         .dc.b    '              指定されたファイルの指定された範囲を再生します',13,10
  1788.         .dc.b    '              /再生範囲 を省略した場合はファイルの先頭から末尾まで再生します',13,10
  1789.         .dc.b    '              不正なオフセットを指定しないように注意して下さい',13,10
  1790.         .dc.b    '              (例えば拡張子が .S44 ならば 4 で割り切れるオフセットでなければならない)',13,10
  1791.         .dc.b    '              ファイル名にはワイルドカードが使えます',13,10
  1792.         .dc.b    '              ファイル名と /再生範囲 は詰めて指定して下さい',13,10
  1793.         .dc.b    '    再生範囲の指定',13,10
  1794.         .dc.b    '      /-:N    ファイルの先頭からオフセット N まで再生します',13,10
  1795.         .dc.b    '      /:N-    オフセット N からファイルの末尾まで再生します',13,10
  1796.         .dc.b    '      /:N1-:N2 オフセット N1 からオフセット N2 まで再生します',13,10
  1797.         .dc.b    '-more-',0,13
  1798.         .dc.b    10        ;-more-を消すとき削除する
  1799.         .dc.b    '  拡張子による自動判別',13,10
  1800.         .dc.b    '    <~>.m16  モノラル,Signed-16bit,Big-endian,16000Hz',13,10
  1801.         .dc.b    '    <~>.m19  モノラル,Signed-16bit,Big-endian,18900Hz',13,10
  1802.         .dc.b    '    <~>.m22  モノラル,Signed-16bit,Big-endian,22050Hz',13,10
  1803.         .dc.b    '    <~>.m24  モノラル,Signed-16bit,Big-endian,24000Hz',13,10
  1804.         .dc.b    '    <~>.m32  モノラル,Signed-16bit,Big-endian,32000Hz',13,10
  1805.         .dc.b    '    <~>.m38  モノラル,Signed-16bit,Big-endian,37800Hz',13,10
  1806.         .dc.b    '    <~>.m44  モノラル,Signed-16bit,Big-endian,44100Hz',13,10
  1807.         .dc.b    '    <~>.m48  モノラル,Signed-16bit,Big-endian,48000Hz',13,10
  1808.         .dc.b    '    <~>.s16  ステレオ,Signed-16bit,Big-endian,16000Hz',13,10
  1809.         .dc.b    '    <~>.s19  ステレオ,Signed-16bit,Big-endian,18900Hz',13,10
  1810.         .dc.b    '    <~>.s22  ステレオ,Signed-16bit,Big-endian,22050Hz',13,10
  1811.         .dc.b    '    <~>.s24  ステレオ,Signed-16bit,Big-endian,24000Hz',13,10
  1812.         .dc.b    '    <~>.s32  ステレオ,Signed-16bit,Big-endian,32000Hz',13,10
  1813.         .dc.b    '    <~>.s38  ステレオ,Signed-16bit,Big-endian,37800Hz',13,10
  1814.         .dc.b    '    <~>.s44  ステレオ,Signed-16bit,Big-endian,44100Hz',13,10
  1815.         .dc.b    '    <~>.s48  ステレオ,Signed-16bit,Big-endian,48000Hz',13,10
  1816.         .dc.b    '    <~>.pcm  モノラル,4bit-ADPCM(MSM6258V),15625Hz',13,10
  1817.         .dc.b    '    <~>.p16  モノラル,Signed-16bit,Big-endian,15625Hz',13,10
  1818.         .dc.b    '  ヘッダによる自動判別',13,10
  1819.         .dc.b    '    WAVE、AIFF、FMP(専用フォーマット)はヘッダで自動判別されます',13,10
  1820.         .dc.b    '-more-',0,13
  1821.         .dc.b    10        ;-more-を消すとき削除する
  1822.         .dc.b    '  フォーマットの強制指定 (拡張子やヘッダを無視する)',13,10
  1823.         .dc.b    '    -m16      モノラル,Signed-16bit,Big-endian,16000Hz',13,10
  1824.         .dc.b    '    -m19      モノラル,Signed-16bit,Big-endian,18900Hz',13,10
  1825.         .dc.b    '    -m22      モノラル,Signed-16bit,Big-endian,22050Hz',13,10
  1826.         .dc.b    '    -m24      モノラル,Signed-16bit,Big-endian,24000Hz',13,10
  1827.         .dc.b    '    -m32      モノラル,Signed-16bit,Big-endian,32000Hz',13,10
  1828.         .dc.b    '    -m38      モノラル,Signed-16bit,Big-endian,37800Hz',13,10
  1829.         .dc.b    '    -m44      モノラル,Signed-16bit,Big-endian,44100Hz',13,10
  1830.         .dc.b    '    -m48      モノラル,Signed-16bit,Big-endian,48000Hz',13,10
  1831.         .dc.b    '    -s16      ステレオ,Signed-16bit,Big-endian,16000Hz',13,10
  1832.         .dc.b    '    -s19      ステレオ,Signed-16bit,Big-endian,18900Hz',13,10
  1833.         .dc.b    '    -s22      ステレオ,Signed-16bit,Big-endian,22050Hz',13,10
  1834.         .dc.b    '    -s24      ステレオ,Signed-16bit,Big-endian,24000Hz',13,10
  1835.         .dc.b    '    -s32      ステレオ,Signed-16bit,Big-endian,32000Hz',13,10
  1836.         .dc.b    '    -s38      ステレオ,Signed-16bit,Big-endian,37800Hz',13,10
  1837.         .dc.b    '    -s44      ステレオ,Signed-16bit,Big-endian,44100Hz',13,10
  1838.         .dc.b    '    -s48      ステレオ,Signed-16bit,Big-endian,48000Hz',13,10
  1839.         .dc.b    '    -pcm      モノラル,4bit-ADPCM(MSM6258V),15625Hz',13,10
  1840.         .dc.b    '    -p16      モノラル,Signed-16bit,Big-endian,15625Hz',13,10
  1841.         .dc.b    '    -xx       フォーマットの強制指定を解除する',13,10
  1842.         .dc.b    '      フォーマットの強制指定はファイル名の手前に記述する必要があります',13,10
  1843.         .dc.b    '  標準入力の再生',13,10
  1844.         .dc.b    '    -         標準入力を PCM データとみなして再生する',13,10
  1845.         .dc.b    '      標準入力を再生するときはフォーマットの強制指定が必要です',13,10
  1846.         .dc.b    '-more-',0,13
  1847.         .dc.b    10        ;-more-を消すとき削除する
  1848.         .dc.b    '(2) CD の音声トラック (CDDA) を読み出して再生するとき',13,10
  1849.         .dc.b    '  トラック番号の指定',13,10
  1850.         .dc.b    '    N,…      トラック N,… を再生する',13,10
  1851.         .dc.b    '    -N        最初のトラックからトラック N まで再生する',13,10
  1852.         .dc.b    '    N-        トラック N から最後のトラックまで再生する',13,10
  1853.         .dc.b    '    N1-N2     トラック N1 からトラック N2 まで再生する',13,10
  1854.         .dc.b    '    all       最初のトラックから最後のトラックまで再生する',13,10
  1855.   .if 0
  1856.         .dc.b    '    mm:ss:ff[-]          mm:ss:ff から最後まで再生する',13,10
  1857.         .dc.b    '    m1:s1:f1-m2:s2:f2    m1:s1:f1 から m2:s2:f2 まで再生する',13,10
  1858.         .dc.b    '    n/mm:ss:ff[-]        トラック n の mm:ss:ff から最後まで再生する',13,10
  1859.         .dc.b    '    n/m1:s1:f1-m2:s2:f2  トラック n の m1:s1:f1 から m2:s2:f2 まで再生する',13,10
  1860.         .dc.b    '      mm:ss:ff = mm 分 ss 秒 ff/75 秒',13,10
  1861.   .endif
  1862.         .dc.b    '  CD-ROM ドライブの指定',13,10
  1863.         .dc.b    '    -id[=]<n>[,<m>]  SCSI-ID=<n>[,LUN=<m>] の CD-ROM ドライブを使う',13,10
  1864.         .dc.b    '      -id の指定がないときは環境変数 CDROM を参照します',13,10
  1865.         .dc.b    '    -sony     SONY 系の CDDA 転送コマンドを使う',13,10
  1866.         .dc.b    '    -toshiba  TOSHIBA 系の CDDA 転送コマンドを使う',13,10
  1867.         .dc.b    '      -sony または -toshiba の指定がないときは自動判別を試みます',13,10
  1868.         .dc.b    '  転送速度',13,10
  1869.         .dc.b    '    -normal   標準速',13,10
  1870.         .dc.b    '    -fast     倍速',13,10
  1871.         .dc.b    '    -ultra    最高速(CDU-561/CDU-55S のときデフォルト)',13,10
  1872.         .dc.b    '  その他',13,10
  1873.         .dc.b    '    -l        CD のトラックの一覧表示',13,10
  1874.         .dc.b    '      CDC.x が常駐しているときは CD のタイトルと曲名も表示します',13,10
  1875.         .dc.b    '    -force    メディア不良による回避できないエラーが発生しても再生を続ける',13,10
  1876.         .dc.b    '      -force を指定しても再生が途切れることがあります',13,10
  1877. *****        .dc.b    '    -soft     SCSI を強制的にソフト(MPU)転送にする (デフォルト)',13,10
  1878. *****        .dc.b    '    -hard     SCSI を強制的にハード(DMA)転送にする',13,10
  1879.         .dc.b    '-more-',0,13
  1880.         .dc.b    10        ;-more-を消すとき削除する
  1881.         .dc.b    '(3) PlayStation の CDXA の圧縮音声データを読み出して再生するとき',13,10
  1882.         .dc.b    '  プレステソフトで拡張子が .STR/.XA/.X16/.X32 などのファイルを再生できます',13,10
  1883.         .dc.b    '    ファイル名[/トラック番号]',13,10
  1884.         .dc.b    '              指定された CDXA ファイルの指定されたトラックを再生します (N=0~255)',13,10
  1885.         .dc.b    '              /トラック番号 を省略した場合はすべてのトラックを再生します',13,10
  1886.         .dc.b    '              ファイル名にはワイルドカードが使えます',13,10
  1887.         .dc.b    '              ファイル名と /トラック番号 は詰めて指定して下さい',13,10
  1888.         .dc.b    '    トラック番号の指定',13,10
  1889.         .dc.b    '      /-N     最初のトラックからトラック N まで再生する',13,10
  1890.         .dc.b    '      /N-     トラック N から最後のトラックまで再生する',13,10
  1891.         .dc.b    '      /N1-N2  トラック N1 からトラック N2 まで再生する',13,10
  1892.         .dc.b    '    CDXA のデータを再生する場合は PCM バッファ(-b<n>)をなるべく大きく確保して下さい',13,10
  1893.         .dc.b    '    拡張子の自動判別に該当するファイルと拡張子が .FMP のファイルは CDXA として再生できません',13,10
  1894.         .dc.b    13,10
  1895.         .dc.b    '◎ FMP フォーマット (FM-PCM) について',13,10
  1896.         .dc.b    '  FMP フォーマットは S44PLAY.X 専用の PCM データフォーマットです',13,10
  1897.         .dc.b    '  サンプリング周波数、ボリューム、PCM→OPM 変換済みなので再生処理が軽くなります',13,10
  1898.         .dc.b    '  リアルタイム変換では処理が間に合わない場合、PCM データをあらかじめ FMP フォー',13,10
  1899.         .dc.b    '  マットに変換しておくと再生できる場合があります',13,10
  1900.         .dc.b    13,10
  1901.         .dc.b    '◎拡張操作モード',13,10
  1902.         .dc.b    '  スイッチ -extra を指定すると拡張操作モードになります',13,10
  1903.         .dc.b    '  拡張操作モードでは、キー、パッド、マウスのボタン操作でフェードアウトします',13,10
  1904.         .dc.b    '  フェードアウトが完了すると自動的に再生が終了します',13,10
  1905.         .dc.b    '  拡張操作モードでも '
  1906.   .if TEST_ESC
  1907.         .dc.b    '[ESC] で終了、'
  1908.   .endif
  1909.   .if TEST_BREAK
  1910.         .dc.b    '[BREAK]/'
  1911.   .endif
  1912.         .dc.b    '[INTERRUPT]/POWER OFF で強制終了できます',13,10
  1913.         .dc.b    '  拡張操作モードでは TIMER-A 割り込みを使います',13,10
  1914.         .dc.b    '  TIMER-A 割り込みが使用中のときは拡張操作モードは使えません',13,10
  1915.         .dc.b    '-more-',0,13
  1916.         .dc.b    10        ;-more-を消すとき削除する
  1917.         .dc.b    '◎注意事項',13,10
  1918.         .dc.b    '  データを変換しながらの再生には 68030 以上の MPU が必要です',13,10
  1919.         .dc.b    '  フィルタを掛けながらリアルタイムに再生するには 68040 以上の MPU が必要です',13,10
  1920.         .dc.b    '  CDXA の圧縮音声データのリアルタイム再生には 68060 以上の MPU が必要です',13,10
  1921.         .dc.b    '  CD の音声トラックを読みながらの再生には 2 倍速以上で取り込めるドライブが必要です',13,10
  1922.         .dc.b    '  音源ドライバ類をすべて解除してから実行して下さい',13,10
  1923.         .dc.b    '  水平同期割り込みを使用する常駐ソフトウェアはすべて解除して下さい',13,10
  1924.         .dc.b    '  垂直同期割り込みを使用する常駐ソフトウェアもなるべく解除して下さい',13,10
  1925.         .dc.b    '  TIMER-C と TIMER-D を使います',13,10
  1926.         .dc.b    '  拡張操作モードでは TIMER-A 割り込みも使います',13,10
  1927.   .if TEST_DEBUG_SWITCH_HELP
  1928.         .dc.b    13,10
  1929.         .dc.b    '[debug switch]',13,10
  1930.         .dc.b    '    -debug       debug mode',13,10
  1931.         .dc.b    '    -debugb=<n>  BEFORE_TIMERC source',13,10
  1932.         .dc.b    '    -debugm=<n>  MUTE_DELAY source',13,10
  1933.         .dc.b    '    -debugp=<n>  PLAY_INTERVAL source',13,10
  1934.         .dc.b    '    -debugs=<n>  STANDBY_DELAY source',13,10
  1935.   .endif
  1936.         .dc.b    0,0
  1937.     .even
  1938.  
  1939.